Harmonic Oscillators¶
In this tutorial, we demo how to generate data of harmonic oscillators.
In [1]:
Copied!
import pandas as pd
import plotly.express as px
from hamilflow.models.harmonic_oscillator import HarmonicOscillator
import pandas as pd
import plotly.express as px
from hamilflow.models.harmonic_oscillator import HarmonicOscillator
/tmp/ipykernel_1920/3199496368.py:1: DeprecationWarning:
Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),
(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)
but was not found to be installed on your system.
If this would cause problems for you,
please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466
import pandas as pd
In [2]:
Copied!
n_periods = 3
n_samples_per_period = 200
n_periods = 3
n_samples_per_period = 200
Simple Harmonic Oscillator¶
In [3]:
Copied!
sho_omega = 0.5
sho = HarmonicOscillator(system={"omega": sho_omega})
sho_omega = 0.5
sho = HarmonicOscillator(system={"omega": sho_omega})
In [4]:
Copied!
df_sho = sho(n_periods=n_periods, n_samples_per_period=n_samples_per_period)
df_sho.head()
df_sho = sho(n_periods=n_periods, n_samples_per_period=n_samples_per_period)
df_sho.head()
Out[4]:
| t | x | |
|---|---|---|
| 0 | 0.000000 | 1.000000 |
| 1 | 0.062832 | 0.999507 |
| 2 | 0.125664 | 0.998027 |
| 3 | 0.188496 | 0.995562 |
| 4 | 0.251327 | 0.992115 |
In [5]:
Copied!
px.line(
df_sho,
x="t",
y="x",
title=rf"Simple Harmonic Oscillator (omega = {sho_omega})",
labels={
"x": r"Displacement $x(t)$",
"t": r"$t$",
},
)
px.line(
df_sho,
x="t",
y="x",
title=rf"Simple Harmonic Oscillator (omega = {sho_omega})",
labels={
"x": r"Displacement $x(t)$",
"t": r"$t$",
},
)
Damped Harmonic Oscillator¶
In [6]:
Copied!
dho_systems = {
"Underdamped": {"omega": 0.5, "zeta": 0.2},
"Critical Damped": {"omega": 0.5, "zeta": 1},
"Overdamped": {
"omega": 0.5,
"zeta": 1.2,
},
}
dfs_dho = []
for s_name, s in dho_systems.items():
dfs_dho.append(
HarmonicOscillator(system=s)(
n_periods=n_periods, n_samples_per_period=n_samples_per_period
).assign(system=rf"{s_name} (omega = {s.get('omega')}, zeta = {s.get('zeta')})")
)
fig = px.line(
pd.concat(dfs_dho),
x="t",
y="x",
color="system",
title=rf"Damped Harmonic Oscillator",
labels={
"x": r"Displacement $x(t)$",
"t": r"$t$",
},
)
fig.update_layout(legend={"yanchor": "top", "y": -0.2, "xanchor": "left", "x": 0})
dho_systems = {
"Underdamped": {"omega": 0.5, "zeta": 0.2},
"Critical Damped": {"omega": 0.5, "zeta": 1},
"Overdamped": {
"omega": 0.5,
"zeta": 1.2,
},
}
dfs_dho = []
for s_name, s in dho_systems.items():
dfs_dho.append(
HarmonicOscillator(system=s)(
n_periods=n_periods, n_samples_per_period=n_samples_per_period
).assign(system=rf"{s_name} (omega = {s.get('omega')}, zeta = {s.get('zeta')})")
)
fig = px.line(
pd.concat(dfs_dho),
x="t",
y="x",
color="system",
title=rf"Damped Harmonic Oscillator",
labels={
"x": r"Displacement $x(t)$",
"t": r"$t$",
},
)
fig.update_layout(legend={"yanchor": "top", "y": -0.2, "xanchor": "left", "x": 0})
In [ ]:
Copied!